PART 12. 설문 데이터 분석과 지도 시각화

목차


학습 목표

📖 목차


12.1 구글 설문 결과 연동

구글 설문지는 실시간으로 데이터를 수집할 수 있는 유용한 도구이며, 설문 결과는 구글 스프레드시트로 저장할 수 있다.

설문 결과 불러오기

본 예제는 read_csv()로 CSV 파일을 불러와 데이터프레임으로 적재하는 절차를 제시한다. head()로 일부 행을 확인하면 열 구조와 데이터 상태를 빠르게 점검할 수 있다.


import pandas as pd

url = "설문_결과_스프레드시트_URL"
df = pd.read_csv(url)
print(df.head())

열 이름 변경 및 자료형 변환

본 예제는 딕셔너리를 생성하고 키-값 쌍을 추가하거나 조회하는 기본 사용법을 보여 준다. 딕셔너리는 순서보다 ‘키를 통한 빠른 조회’에 강점이 있으므로, 항목 이름을 키로 삼는 상황에 적합하다.


df.rename(columns={
    "자격증 점수(기사:1000,산업기사:900,기능사:800)": "자격증 점수",
    "희망 업무(복수 가능)": "희망 업무"
}, inplace=True)

df["자격증 점수"] = df["자격증 점수"].astype(int)
df["토익 점수"] = df["토익 점수"].astype(int)

합격 여부 판정

본 예제는 해당 단원에서 다루는 핵심 개념을 코드로 확인하기 위한 예시이다. 변수의 의미를 파악한 뒤, 입력·처리·출력의 흐름을 따라 실행 결과를 해석하는 것이 중요하다.


df["합계"] = df["자격증 점수"] + df["토익 점수"]
df["결과"] = df["합계"].apply(lambda x: "합격" if x >= 1500 else "불합격")

희망 업무 빈도수 계산

본 예제는 딕셔너리에서 키로 값을 조회하는 방법을 제시한다. 키 존재 여부를 in 연산자로 확인한 뒤 접근하면, 존재하지 않는 키로 인한 오류를 예방할 수 있다.


result = {"개발":0, "기획":0, "경영":0, "영업":0}

for works in df["희망 업무"]:
    for w in works.split(", "):
        result[w] += 1

print(result)

12.2 지도 시각화

폴리움으로 지도 만들기

본 예제는 folium으로 지도를 생성한 뒤, 마커를 추가하여 위치 정보를 시각화하는 방법을 보인다. 생성한 지도 객체는 save()로 HTML 파일로 저장할 수 있어 공유에 용이하다.


import folium

m = folium.Map(location=[37.5665, 126.9780], zoom_start=12)
m

마커 추가하기

본 예제는 folium으로 지도를 생성한 뒤, 마커를 추가하여 위치 정보를 시각화하는 방법을 보인다. 생성한 지도 객체는 save()로 HTML 파일로 저장할 수 있어 공유에 용이하다.


folium.Marker(
    location=[37.579754, 126.976681],
    tooltip="경복궁",
    popup="서울 고궁"
).add_to(m)

m

지도 저장

본 예제는 해당 단원에서 다루는 핵심 개념을 코드로 확인하기 위한 예시이다. 변수의 의미를 파악한 뒤, 입력·처리·출력의 흐름을 따라 실행 결과를 해석하는 것이 중요하다.


m.save("seoul_map.html")

12.3 [플러스 예제] 관광지 방문자 수 지도

관광지 방문자 수 집계

본 예제는 딕셔너리를 생성하고 키-값 쌍을 추가하거나 조회하는 기본 사용법을 보여 준다. 딕셔너리는 순서보다 ‘키를 통한 빠른 조회’에 강점이 있으므로, 항목 이름을 키로 삼는 상황에 적합하다.


tour = {
    "성산일출봉": 120,
    "한라산": 90,
    "만장굴": 60
}

지오코딩과 지도 표시

본 예제는 딕셔너리의 항목을 (키, 값) 쌍으로 순회하기 위해 items()를 사용한다. 각 반복에서 키와 값을 동시에 받아 처리함으로써, 저장된 데이터를 효율적으로 확인할 수 있다.


from geopy.geocoders import Nominatim

geo = Nominatim(user_agent="map")
center = geo.geocode("제주도")

m = folium.Map(location=[center.latitude, center.longitude], zoom_start=10)

for place, cnt in tour.items():
    loc = geo.geocode(place)
    folium.Marker(
        [loc.latitude, loc.longitude],
        tooltip=f"{place} ({cnt}명)"
    ).add_to(m)

m